package net.neptech.core.service;

import cn.dev33.satoken.stp.StpInterface;
import lombok.extern.slf4j.Slf4j;
import net.neptech.domian.model.LoginUser;
import net.neptech.utils.SecurityUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author: liyuxiang
 * @Date: 2025/8/13 13:49
 * sa-token 权限管理实现类
 */
@Slf4j
public class SaPermissionImpl implements StpInterface {

    /**
     * 获取菜单权限列表
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        log.info("getPermissionList({}, {})", loginType, loginId);

        // 检查用户是否已登录（通过SecurityContextHolder检查是否有用户信息）
        Long userId = SecurityUtils.getUserId();
        String username = SecurityUtils.getUsername();
        System.out.println("用户权限列表：");
        System.out.println(SecurityUtils.getLoginUser().getPermissions());
        if (userId == null || userId == 0L) {
            log.warn("用户未登录，无法获取权限列表");
            return new ArrayList<>();
        }

        log.info("为用户 {} ({}) 获取权限列表", username, userId);

        // 目前给所有登录用户分配基本权限，后续可以根据用户角色从数据库获取
        // 这里暂时给个默认权限，让测试接口能通过
        List<String> permissions = new ArrayList<>();
        permissions.add("system:user:list");
        permissions.add("system:role:list");

        log.info("用户 {} 的权限列表: {}", username, permissions);
        return SecurityUtils.getLoginUser().getPermissions().stream().toList();
    }

    /**
     * 获取角色权限列表
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        log.info("getRoleList({}, {})", loginType, loginId);

        // 检查用户是否已登录
        Long userId = SecurityUtils.getUserId();
        String username = SecurityUtils.getUsername();

        if (userId == null || userId == 0L) {
            log.warn("用户未登录，无法获取角色列表");
            return new ArrayList<>();
        }

        log.info("为用户 {} ({}) 获取角色列表", username, userId);

        // 目前给所有登录用户分配默认角色，后续可以根据用户从数据库获取
        List<String> roles = new ArrayList<>();

        // 管理员用户
        if (SecurityUtils.isAdmin(userId)) {
            roles.add("admin");
            roles.add("user");
        } else {
            // 普通用户
            roles.add("user");
        }

        log.info("用户 {} 的角色列表: {}", username, roles);
        return roles;
    }
}
